有关「TensorFlow」的其他学习笔记系列:「TensorFlow」
TensorFlow Tensorboard
Tensorboard 是 TensorFlow 中帮助我们对所构建的静态图 Graph 进行可视化的工具,对于我们初学者理解网络架构、每层网络的细节都是很有帮助的。由于前几天刚接触 TensorFlow,所以在尝试学习 Tensorboard 的过程中,遇到了一些问题。在此基础上,参考了 TensorFlow 官方的 Tensorboard Tutorials 以及网上的一些文章。由于前不久 TensorFlow 1.0 刚发布,网上的一些学习资源或者是 tensorboard 代码在新的版本中并不适用,所以自己改写并实现了官方网站上提及的三个实例的 Tensorboard 版本:
- 最基础简单的线性回归模型
- 基于 MNIST 手写体数据集的浅层 MLP 模型
- 基于 MNIST 手写体数据集的 CNN 模型
文章不会详细介绍 TensorFlow 以及 Tensorboard 的知识,主要是模型的代码以及部分模型实验截图。
注意:文章前提默认读者们知晓 TensorFlow,知晓 Tensorboard,以及 TensorFlow 的一些主要概念Variables
、Placeholder
。还有,默认你已经将需要用到的 MNIST 数据集下载到了你代码当前所在文件夹。
Environment
OS: macOS Sierra 10.12.x
Python Version: 3.6.x
TensorFlow: 1.x
Tensorboard
Tensorboard 有几大模块:
- SCALARS:记录单一变量的,使用
tf.summary.scalar()
收集构建。 - IMAGES:收集的图片数据,当我们使用的数据为图片时(选用)。
- AUDIO:收集的音频数据,当我们使用数据为音频时(选用)。
- GRAPHS:构件图,效果图类似流程图一样,我们可以看到数据的流向,使用
tf.name_scope()
收集构建。 - DISTRIBUTIONS:用于查看变量的分布值,比如 W(Weights)变化的过程中,主要是在 0.5 附近徘徊。
- HISTOGRAMS:用于记录变量的历史值(比如 weights 值,平均值等),并使用折线图的方式展现,使用
tf.summary.histogram()
进行收集构建。
Examples
最简单的线性回归模型
1 | import tensorflow as tf |
基于 MNIST 手写体数据集的浅层 MLP 模型
1 | # 基于 MNIST 手写体数据集的浅层 MLP 模型 |
基于 MNIST 手写体数据集的 CNN 模型
1 | # 基于 MNIST 数据集的 CNN 模型 |
可能对于最后一个模型 CNN 的代码,需要一些 CNN 卷积神经网络的一些知识。例如什么是卷积、池化,还需要了解 TensorFlow 中用到的相应函数,如 tf.nn.conv2d()
,tf.nn.max_pool()
,这里不再赘述,可以参考我的这篇文章:♛「Machine Learning」CNN Introduction。
Experiment
贴上最后一个模型的部分代码截图:
说明:上图右侧是 CNN 网络训练的步数以及对应的结果,程序需要运行挺久时间的,CPU 占用率也很高,建议挂在晚上跑,人去休息睡觉。可以根据自身机器条件修改参数 range(10000)。。
上述代码运行完成之后,命令行中跳转到代码生成的「train」文件夹中(其和代码文件存在于同一文件夹中),然后输入 tensorboard --logdir .
,等待程序反应之后,浏览器访问localhost:6006
(当然你也可以自己定义端口)。如果不出意外,你会得到以下内容:
Tensorboard Info
Scalars:
Graphs:
Distributions:
Histograms:
关于各个模块的作用,以及各个变量的意义,开篇已经提及,我在此就不再赘述了。
另外,在自己的机器模型在训练期间(特别是深度网络),训练时间通常几小时到十几小时不等,甚至可能会花上好几天,那么在这段时间,你们又会干些什么事情呢?作为程序员,这里提供一个「有趣的」方式,可以使用你的微信来监控你的模型在训练期间的一举一动,具体做法参考我的另一篇文章 ♣「TensorFlow」Use WeChat to Monitor Your Network